签名算法:HMAC-SHA1

目前,云监控只支持数字签名算法HMAC-SHA1。通过本文您可以了解数字签名算法HMAC-SHA1的操作方法。

操作步骤

  1. 准备可用的阿里云访问密钥。

    当HTTP请求生成签名时,需要使用一对访问密钥(AccessKey ID和AccessKey Secret)。

    说明

    您可以使用已存在的访问密钥,也可以创建新的访问密钥,但需要保证该密钥处在启用状态。

  2. 生成请求的签名字符串。

    HTTP签名字符串由HTTP请求中的MethodHeaderBody信息共同生成。

    SignString = VERB + "\n"
                 + CONTENT-MD5 + "\n"
                 + CONTENT-TYPE + "\n"
                 + DATE + "\n"
                 + CanonicalizedHeaders + "\n"
                 + CanonicalizedResource

    上述签名字符串中的\n表示换行转义字符,+表示字符串连接操作,其他部分定义如下表所示。

    名称

    描述

    示例

    VERB

    HTTP请求的方法名称。

    PUT、GET、POST

    CONTENT-MD5

    HTTP请求中Body部分的MD5值。

    说明

    MD5必须为大写字母和数字字符串。

    0B9BE351E56C90FED853B32524253E8B

    CONTENT-TYPE

    HTTP请求中Body部分的类型。

    application/json

    DATE

    HTTP请求中的标准时间戳头。

    说明

    遵循RFC 1123格式,使用GMT标准时间。

    Mon, 3 Jan 2010 08:33:47 GMT

    CanonicalizedHeaders

    由HTTP请求中以x-cmsx-acs为前缀的自定义头构造的字符串。

    • x-cms-api-version:0.1.0

    • x-cms-signature

    CanonicalizedResource

    由HTTP请求资源构造的字符串。

    /event/custom/upload

    上表中CanonicalizedHeaders和CanonicalizedResource构造方式如下:

    • CanonicalizedHeaders

      1. 将所有以x-cmsx-acs为前缀的HTTP请求头的名字转换成小写字母。

      2. 将所有CMS和ACS自定义请求头按照字典序的升序进行排序。

      3. 删除请求头和内容之间分隔符两端出现的任何空格。

      4. 将所有的请求头和内容用\n分隔符组合成最后的CanonicalizedHeaders。

    • CanonicalizedResource

      1. 将CanonicalizedResource设置为空字符串(””)。

      2. 将CanonicalizedResource中放入待访问的URI,例如:/event/custom/upload

      3. 如果请求包含查询字符串(QUERY_STRING),则在CanonicalizedResource字符串尾部添加?和查询字符串。

        其中QUERY_STRING是URI中请求参数按字典序排序后的字符串,其中参数名和值之间用=相隔组成字符串,并对参数名和值按照字典序升序排序,然后以&符号连接构成字符串。其公式化描述如下:

        QUERY_STRING = "KEY1=VALUE1" + "&" + "KEY2=VALUE2"
  3. 生成请求的数字签名。

    数字签名公式如下:

    Signature=base16(hmac-sha1(UTF8-Encoding-Of(SignString),AccessKeySecret))

    签名举例:

    SignString="POST" + "\n"
    +"0B9BE351E56C90FED853B32524253E8B" + "\n"
    +"application/json" + "\n"
    +"Tue, 11 Dec 2018 21:05:51 +0800" + "\n"
    +"x-cms-api-version:1.0" + "\n"
    +"x-cms-ip:127.0.0.1" + "\n"
    +"x-cms-signature:hmac-sha1" + "\n"
    +"/metric/custom/upload"
    accesskey="testkey"
    accessSecret="testsecret" //签名密钥。

    签名结果:

    1DC19ED63F755ACDE203614C8A1157EB1097E922